package com.mdc.mansion.core.modules.demo;

import com.google.common.collect.Lists;
import com.mdc.mansion.common.util.SerialToolKit;
import com.mdc.mansion.core.modules.demo.domain.CacheDto;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SpringCacheDemoService {
	
	/**
	 * 在demoCache field下面添加一个 key为（cacheDto.name+cacheDto.size）的缓存
	 * 并设置demoCache下面所有的缓存的时间为cacheDto.liveTimes
	 * @param cacheDto
	 * @return
	 * 
	 * 备注这里的缓存时间都是针对demoCache设置的（也就是针对spring annotion中的value里面的值设置的）
	 * 由于多个缓存可以使用同一个field 所以说如果针对不同缓存下面key都设置了过期时间 那么这个设置的过期时间就以最后一次设置为准
	 */
	
	@Cacheable(value="demoCache",key="#cacheDto.name + #cacheDto.size +'$$'+#cacheDto.liveTimes")
	public List<String> getSizeList(CacheDto cacheDto){
		List<String> list=Lists.newArrayList();
		for(int i=0;i<cacheDto.getSize();i++){
			list.add(SerialToolKit.sequence());
		}
		list.add(cacheDto.getName()+cacheDto.getSize());
		return list;
	}
	
	/**
	 * 删除demoCache field下面的key为（cacheDto.name+cacheDto.size）的缓存
	 * @param cacheDto
	 * @return
	 */
	@CacheEvict(value="demoCache",key="#cacheDto.name + #cacheDto.size")
	public String delete(CacheDto cacheDto){
		System.out.println("从demoCache缓存中删除"+(cacheDto.getName()+cacheDto.getSize())+"的缓存");
		return "从demoCache缓存中删除"+(cacheDto.getName()+cacheDto.getSize())+"的缓存";
	}
	
	/**
	 * 移除demoCache field下面所有的缓存
	 */
	@CacheEvict(value="demoCache",allEntries=true)
	public String deleteAll(){
		System.out.println("从demoCache缓存中删除所有的缓存");
		return "从demoCache缓存中删除所有的缓存";
	}
}
